﻿Imports PTIC_Util.GestionCalculs
Imports PTIC_Util

Namespace moteurTauxGaranti2

    Partial Public Class Moteur_Methode2
        Private Class fonctionCalculMoteur2
            Inherits FonctionCalculRacine

#Region "Variables globales"
            Protected _fonctionCalculProjGen1detaillee As FonctionCalculIndividuelle
            Protected _fonctionCalculProjGen1annuelle As FonctionCalculComposee
            Protected _fonctionCalculProjGenNannuelle As FonctionCalculComposee
            Protected _fonctionCalculComptes As FonctionCalculComposee
            Protected _moteur2 As Moteur_Methode2
#End Region
#Region "Constructeur"
            Public Sub New(ByVal typeRecalcul As TypeRecalcul, _
                           ByVal moteur2 As Moteur_Methode2)
                MyBase.New(PTIC_Util.TypeRecalcul.SurOrdre)
                constructeurBase(moteur2)
            End Sub
            Public Sub New(ByVal typeRecalcul As TypeRecalcul, _
                           ByVal moteur2 As Moteur_Methode2, _
                           ByVal etatExecRef As EtatCalcul)
                MyBase.New(PTIC_Util.TypeRecalcul.SurOrdre)
                '_etatCalcul = etatExecRef
                '_etatCalcul.ajouteObserver(Me)
                constructeurBase(moteur2)
            End Sub
            Public Sub constructeurBase(ByVal moteur2 As Moteur_Methode2)

                'Création des objets intervenant dans le recalcul du moteur2 et définition des dépendances
                _moteur2 = moteur2
                _fonctionCalculProjGen1detaillee = New FonctionProjGen1Detaillee( _
                                                            AddressOf moteur2.calculProjectionDetailleesGen1)
                _fonctionCalculProjGen1annuelle = New FonctionCalculComposee(PTIC_Util.TypeRecalcul.SurOrdre, _
                                                            AddressOf moteur2.calculProjectionAnuelleGen1)
                _fonctionCalculProjGenNannuelle = New FonctionCalculComposee(PTIC_Util.TypeRecalcul.SurOrdre, _
                                                            AddressOf moteur2.calculEmpilementGenerations)
                _fonctionCalculComptes = New FonctionCalculComposee(TypeRecalcul.SurOrdre, _
                                                            AddressOf moteur2.calculComptes)

                _fonctionCalculProjGen1annuelle.AjouteFonctionCalculIntermediaire(_fonctionCalculProjGen1detaillee)
                _fonctionCalculProjGenNannuelle.AjouteFonctionCalculIntermediaire(_fonctionCalculProjGen1annuelle)
                _fonctionCalculComptes.AjouteFonctionCalculIntermediaire(_fonctionCalculProjGenNannuelle)
                Me.AjouteFonctionCalculIntermediaire(_fonctionCalculComptes)

                'Paramétrage des observations
                AddHandler moteur2.ParametreHasChanged, AddressOf onParametreHasChanged
                AddHandler moteur2.NbGenerationsProjeteesChanged, AddressOf onNbGenerationsProjeteesChanged
                AddHandler moteur2.FiltreSegmentsChanged, AddressOf onFiltreSegmentsChanged
                AddHandler moteur2.FiltreGenerationsChanged, AddressOf onFiltreGenerationsChanged
                AddHandler moteur2.CapitauxInitiauxChanged, AddressOf onCapitauxInitiauxChanged
                AddHandler moteur2.NbPretsInitiauxChanged, AddressOf onNbPretsInitiauxChanged
                AddHandler moteur2.CroissCImoyensChanged, AddressOf onCroissCIMoyensChanged
                AddHandler moteur2.CroissNbPretsChanged, AddressOf onCroissNbPretsChanged
                AddHandler moteur2.InvaliderCalculs, AddressOf onCalculsMoteur2_AfterInvalider
                AddHandler _fonctionCalculProjGen1detaillee.BeforeInvalider, AddressOf onFonctionCalculProjGen1detaillee_AvantInvalider

                'Définition du mode de recalcul
                Me.ModeRecalcul = PTIC_Util.TypeRecalcul.SurOrdre
            End Sub
#End Region
#Region "Propriétés"
            Public ReadOnly Property etatCalculProjGen1detaillee() As ValueEtatCalcul
                Get
                    Return _fonctionCalculProjGen1detaillee.EtatCalcul
                End Get
            End Property
            Public ReadOnly Property etatCalculProjGen1annuelle() As ValueEtatCalcul
                Get
                    Return _fonctionCalculProjGen1annuelle.EtatCalcul
                End Get
            End Property
            Public ReadOnly Property etatCalculProjGenNannuelle() As ValueEtatCalcul
                Get
                    Return _fonctionCalculProjGenNannuelle.EtatCalcul
                End Get
            End Property
            Public ReadOnly Property etatCalculComptes() As ValueEtatCalcul
                Get
                    Return _fonctionCalculComptes.EtatCalcul
                End Get
            End Property
#End Region
#Region "Traitement des évènements reçus de l'extérieur"
            Private Sub onFonctionCalculProjGen1detaillee_AvantInvalider(ByVal sender As Object, ByVal e As EventArgs)
                Me.ModeRecalcul = TypeRecalcul.SurOrdre
                'Invalider le scénario central
                If _moteur2.TypeScenarioCalcule = TypeCalcul.ScenarioCentral Then _moteur2.scenarioCentral.Invalider()
            End Sub
            Private Sub onNbGenerationsProjeteesChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGenNannuelle.Invalider()
            End Sub
            Private Sub onFiltreSegmentsChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGen1annuelle.Invalider()
            End Sub
            Private Sub onFiltreGenerationsChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGen1annuelle.Invalider()
            End Sub
            Private Sub onCapitauxInitiauxChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGen1detaillee.Invalider()
            End Sub
            Private Sub onNbPretsInitiauxChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGen1detaillee.Invalider()
            End Sub
            Private Sub onCroissCIMoyensChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGenNannuelle.Invalider()
            End Sub
            Private Sub onCroissNbPretsChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGenNannuelle.Invalider()
            End Sub
            Private Sub onCalculsMoteur2_AfterInvalider(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGen1detaillee.Invalider()
            End Sub
            Private Sub onParametreHasChanged(ByVal sender As Object, ByVal e As EventArgs)
                _fonctionCalculProjGen1detaillee.Invalider()
            End Sub
#End Region

        End Class
    End Class

End Namespace
